export default {
  namespaced: true,
  state: () => {
    const cartStr = uni.getStorageSync('101-cart')
    return {
      cartItems: cartStr ? JSON.parse(cartStr) : [],
    }
  },
  mutations: {
    // 1. 添加商品到购物车
    addToCart(state, product) {
      // 1.1 找商品
      const oldProduct = state.cartItems.find(
        (item) => item.goods_id === product.goods_id
      )
      // 1.2 判断
      if (oldProduct) {
        // 如果购物车中有你添加的这个商品, 去找打这个商品, 修改商品的数量
        oldProduct.goods_count++
      } else {
        // 如果购物车中没有你添加的这个商品, 直接把商品放入购物车数组
        state.cartItems.push(product)
      }
      // 1.3 把购物车数据数组持久化到本地
      uni.setStorageSync('101-cart', JSON.stringify(state.cartItems))
    },
    // 2. 修改单个商品的选中状态
    updateState(state, product) {
      // 2.1 找商品
      const oldProduct = state.cartItems.find(
        (item) => item.goods_id === product.goods_id
      )
      // 2.2 判断
      if (oldProduct) {
        oldProduct.goods_state = !oldProduct.goods_state
        // 2.3 把购物车数据数组持久化到本地
        uni.setStorageSync('101-cart', JSON.stringify(state.cartItems))
      }
    },
    // 3. 修改单个商品的购买数量
    updateCount(state, { product, num }) {
      // 3.1 找商品
      const oldProduct = state.cartItems.find(
        (item) => item.goods_id === product.goods_id
      )
      // 3.2 判断
      if (oldProduct) {
        oldProduct.goods_count = num
        // 3.3 把购物车数据数组持久化到本地
        uni.setStorageSync('101-cart', JSON.stringify(state.cartItems))
      }
    },
    // 4. 从购物车中去移除一个商品
    removeProduct(state, product) {
      // 4.1 过滤出不删除的商品
      state.cartItems = state.cartItems.filter(
        (item) => item.goods_id !== product.goods_id
      )
      // 4.2  把购物车数据数组持久化到本地
      uni.setStorageSync('101-cart', JSON.stringify(state.cartItems))
    },
    // 5.修改所有商品的选中状态
    updateAllState(state, flag) {
      state.cartItems.forEach((item) => (item.goods_state = flag))
      // 持久化到本地存储
      uni.setStorageSync('101-cart', JSON.stringify(state.cartItems))
    },
  },
  actions: {},
  getters: {
    // 1. 统计购物车中商品的总件数
    total(state) {
      return state.cartItems.reduce((sum, item, index) => {
        return (sum += item.goods_count)
      }, 0)
    },
    // 2. 购物车中选中商品的总数量
    checkedTotal(state) {
      return state.cartItems.reduce((sum, item, index) => {
        if (item.goods_state) {
          return (sum += item.goods_count)
        } else {
          return sum
        }
      }, 0)
    },
    // 3. 计算已经勾选商品的总价
    checkedAmount(state) {
      const amountTotal = state.cartItems.reduce((sum, item, index) => {
        if (item.goods_state) {
          return (sum += item.goods_count * item.goods_price)
        } else {
          return sum
        }
      }, 0)
      return Number(amountTotal).toFixed(2)
    },
  },
}
